/**
 * 会话管理工具
 * 统一管理用户登录状态、token和用户信息
 */

import { USER_INFO_KEY } from '@/constants/auth'

/**
 * 会话管理类
 */
class SessionManager {
  /**
   * 保存用户信息
   * @param {Object} userInfo 用户信息对象，包含address和token
   */
  saveUserInfo(userInfo) {
    if (userInfo) {
      localStorage.setItem(USER_INFO_KEY, JSON.stringify(userInfo))
    }
  }
  
  /**
   * 保存会话
   * @param {Object} userInfo 用户信息
   * @param {number} duration 会话持续时间（毫秒），默认24小时
   */
  // saveSession(userInfo, duration = 24 * 60 * 60 * 1000) {
  //   this.saveUserInfo(userInfo)
  // }
  
  
  /**
   * 设置过期时间
   * @param {number} milliseconds 毫秒数
   */
  setExpiryTime(milliseconds) {
    // 实现过期时间设置逻辑
  }
  
  /**
   * 检查是否有有效会话
   * @returns {boolean} 是否有有效会话
   */
  hasValidSession() {
    return this.isLoggedIn()
  }

  /**
   * 获取用户信息
   * @returns {Object|null} 用户信息对象
   */
  getUserInfo() {
    const userInfoStr = localStorage.getItem(USER_INFO_KEY)
    if (userInfoStr) {
      try {
        return JSON.parse(userInfoStr)
      } catch (error) {
        console.error('解析用户信息失败:', error)
        return null
      }
    }
    return null
  }

  /**
   * 获取用户Token
   * @returns {string|null} 用户Token
   */
  getToken() {
    const userInfoStr = localStorage.getItem(USER_INFO_KEY)
    if (userInfoStr) {
      try {
        const userInfo = JSON.parse(userInfoStr)
        return userInfo.token
      } catch (error) {
        console.error('解析用户信息失败:', error)
        return null
      }
    }
    return null
  }

  /**
   * 获取用户地址
   * @returns {string|null} 用户钱包地址
   */
  getUserAddress() {
    const userInfoStr = localStorage.getItem(USER_INFO_KEY)
    if (userInfoStr) {
      try {
        const userInfo = JSON.parse(userInfoStr)
        return userInfo.address
      } catch (error) {
        console.error('解析用户信息失败:', error)
        return null
      }
    }
    return null
  }

  /**
   * 清除用户会话信息
   * 包括Token、用户地址和用户信息
   */
  clearSession(type) {
    localStorage.removeItem(USER_INFO_KEY)
  }

  /**
   * 检查用户是否已登录
   * @returns {boolean} 是否已登录
   */
  isLoggedIn() {
    return !!this.getToken()
  }
}

// 创建单例实例
const sessionManager = new SessionManager()

// 导出命名函数，保持与之前API兼容
export const saveUserInfo = userInfo => sessionManager.saveUserInfo(userInfo)
export const getUserInfo = () => sessionManager.getUserInfo()
export const getToken = () => sessionManager.getToken()
export const getUserAddress = () => sessionManager.getUserAddress()
export const clearSession = () => sessionManager.clearSession()
export const isLoggedIn = () => sessionManager.isLoggedIn()

// 导出默认实例
export default sessionManager
